"""
预设配置管理器 - 基于 Linus 设计哲学
简单胜过复杂 - 消除所有不必要的配置选项
"""

import os
import multiprocessing
from typing import Dict, Any


class PresetManager:
    """预设配置管理器 - 三种模式覆盖所有使用场景"""
    
    def __init__(self):
        # 预设配置 - 每个模式只包含必要的参数
        self.presets = {
            "dev": {
                "interface": "asginl",
                "reload": True,
                "host": "0.0.0.0",
                "port": 8000,
                "workers": 1
            },
            "prod": {
                "interface": "asginl",
                "reload": False,
                "host": "0.0.0.0",
                "port": 8000,
                "workers": multiprocessing.cpu_count()
            },
            "example": {
                "interface": "asginl",
                "reload": True,
                "host": "0.0.0.0",
                "port": 8000,
                "workers": 1
            }
        }
    
    def get_preset(self, mode: str) -> Dict[str, Any]:
        """获取预设配置
        
        Args:
            mode: 运行模式 (dev/prod/example)
            
        Returns:
            预设配置字典
        """
        if mode not in self.presets:
            raise ValueError(f"不支持的模式: {mode}。支持的模式: {', '.join(self.presets.keys())}")
        
        return self.presets[mode].copy()
    
    def get_workers_count(self, mode: str, custom_workers: int = None) -> int:
        """获取工作进程数
        
        Args:
            mode: 运行模式
            custom_workers: 自定义工作进程数
            
        Returns:
            工作进程数
        """
        if custom_workers is not None:
            return custom_workers
        
        preset = self.get_preset(mode)
        return preset["workers"]
    
    def apply_preset(self, mode: str, config: Dict[str, Any]) -> Dict[str, Any]:
        """应用预设配置到用户配置
        
        Args:
            mode: 运行模式
            config: 用户配置
            
        Returns:
            合并后的配置
        """
        preset = self.get_preset(mode)
        
        # 合并预设和用户配置，用户配置优先级更高
        result = preset.copy()
        result.update(config)
        
        return result
    
    def get_default_mode(self) -> str:
        """获取默认模式"""
        return "dev"